# 导入接口对象层封装的接口类
import pytest
from api.login import LoginAPI

source_data = [
    ("admin","HM_2023_test",200,"成功",200),
    ("","HM_2023_test",200,"错误",500),
    ("admin01","HM_2023_test",200,"错误",500),
]

# 创建测试类
class TestLoginAPI:
    uid = None
    # 前置处理（将第一步导入进来的接口类实例化）
    def setup_method(self):
        self.login_api = LoginAPI() #将第一步导入进来的类实例化为一个对象
        # 将验证码接口返回的uuid提取出来
        resp = self.login_api.get_verify_code()#resp验证码接口的完整响应信息
        # 从验证码接口的完整响应信息中拿到uuid字段的值
        TestLoginAPI.uid = resp.json().get("uuid")

    # 后置处理
    def teardown_method(self):
        pass
    # 编写测试用例方法
    # 登录成功

    @pytest.mark.parametrize("username,password,status,message,code",source_data)
    def test01_success(self,username,password,status,message,code):
        login_data = {
            "username": username,
            "password": password,
            "code": "2",
            "uuid": TestLoginAPI.uid}
        resp = self.login_api.login(test_data=login_data)#前置处理操作中实例化的对象
        # 调用login方法并且给login方法传入测试数据，拿到了登录的整个响应结果，并且存储到了resp中
        # 断言状态码是否为200
        assert status == resp.status_code
        # 断言字符串“成功”是否在响应文本中
        assert message in resp.text
        # 断言code字段的值是否为200
        assert code == resp.json().get("code")

